/**
 * 
 */
package br.edu.catolica.sadbc.action;

import java.util.ArrayList;
import java.util.List;

import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.datamodel.DataModel;

import br.edu.catolica.sadbc.core.action.AbstractAction;
import br.edu.catolica.sadbc.core.exception.BusinessObjectException;
import br.edu.catolica.sadbc.core.util.StringUtil;
import br.edu.catolica.sadbc.entity.TipoAtividade;
import br.edu.catolica.sadbc.entity.filter.TipoAtividadeSearchFilter;
import br.edu.catolica.sadbc.manager.TipoAtividadeManager;

/**
 * @author robert.resende
 *
 */
@Name(value = "tipoAtividadeAction")
public class TipoAtividadeAction extends AbstractAction<TipoAtividade> {
	
	@In(required = false)
	@Out(required = false)
	private TipoAtividade tipoAtividade;
	
	@In(required = false)
	private TipoAtividadeSearchFilter tipoAtividadeSearchFilter;
	
	@In(required = false)
	private TipoAtividadeManager tipoAtividadeManager;
	
	@DataModel
	private List<TipoAtividade> tipoAtividades;
	
	private Boolean exibeDataTable = Boolean.FALSE;
	
	public void init() {
		this.tipoAtividade = null;
		this.tipoAtividadeSearchFilter = null;
		this.tipoAtividades = new ArrayList<TipoAtividade>();
		this.exibeDataTable = Boolean.FALSE;
	}
	
	public List<TipoAtividade> pesquisarTipoAtividade() {
		if (validarCamposPesquisa(this.tipoAtividadeSearchFilter)) {
			this.tipoAtividades = this.tipoAtividadeManager.buscarTipoAtividade(this.tipoAtividadeSearchFilter);
			if (this.tipoAtividades != null && !this.tipoAtividades.isEmpty()) {
				this.exibeDataTable = Boolean.TRUE;
			} else {
				addMessageInfo("Nenhum resultado encontrado.");
			}
		}
		
		return this.tipoAtividades;
	}
	
	public String editarTipoAtividade(TipoAtividade tipoAtividade) {
		this.tipoAtividade = tipoAtividade;
		return RESULT_EDIT;
	}
	
	public String excluirTipoAtividade(TipoAtividade tipoAtividade) {
		return RESULT_EDIT;
	}
	
	public String salvarTipoAtividade() {
		try {
			String retorno = this.tipoAtividadeManager.salvar(this.tipoAtividade);
			addMessageInfo("Operação realizada com sucesso.");
			return retorno;
		} catch (BusinessObjectException e) {
			e.printStackTrace();
			addMessageErro(e.getLocalizedMessage());
			return RESULT_FAIL;
		}
	}
	
	public String atualizarTipoAtividade() {
		try {
			String retorno = this.tipoAtividadeManager.update(this.tipoAtividade);
			addMessageInfo("Operação realizada com sucesso.");
			return retorno;
		} catch (BusinessObjectException e) {
			e.printStackTrace();
			addMessageErro(e.getLocalizedMessage());
			return RESULT_FAIL;
		}
	}
	
	public String detalharTipoAtividade(TipoAtividade tipoAtividade) {
		this.tipoAtividade = tipoAtividade;
		return RESULT_DETAIL;
	}
	
	private boolean validarCamposPesquisa(TipoAtividadeSearchFilter tipoAtividadeSearchFilter) {
		if (StringUtil.getInstance().isVazia(tipoAtividadeSearchFilter.getNomeTipoAtividade()) && StringUtil.getInstance().isVazia(tipoAtividadeSearchFilter.getDescricaoTipoAtividade())) {
			addMessageErro("Nenhum filtro de pesquisa informado.");
			return Boolean.FALSE;
		} else if (StringUtil.getInstance().isNaoVazia(tipoAtividadeSearchFilter.getNomeTipoAtividade()) && StringUtil.getInstance().isMenor(3, tipoAtividadeSearchFilter.getNomeTipoAtividade())) {
			addMessageErro("Campo nome informado menor que 3 caracteres.");
			return Boolean.FALSE;
		} else if (StringUtil.getInstance().isNaoVazia(tipoAtividadeSearchFilter.getDescricaoTipoAtividade()) && StringUtil.getInstance().isMenor(3, tipoAtividadeSearchFilter.getDescricaoTipoAtividade())) {
			addMessageErro("Campo descrição informado menor que 3 caracteres.");
			return Boolean.FALSE;
		}
		return Boolean.TRUE;
	}

	public Boolean getExibeDataTable() {
		return exibeDataTable;
	}

	public void setExibeDataTable(Boolean exibeDataTable) {
		this.exibeDataTable = exibeDataTable;
	}

}
